// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE

(function(mod) {
  if (typeof exports == 'object' && typeof module == 'object')
    // CommonJS
    mod(require('../../lib/codemirror'));
  else if (typeof define == 'function' && define.amd)
    // AMD
    define(['../../lib/codemirror'], mod);
  // Plain browser env
  else mod(CodeMirror);
})(function(CodeMirror) {
  'use strict';

  CodeMirror.defineMode('diff', function() {
    var TOKEN_NAMES = {
      '+': 'positive',
      '-': 'negative',
      '@': 'meta',
    };

    return {
      token: function(stream) {
        var tw_pos = stream.string.search(/[\t ]+?$/);

        if (!stream.sol() || tw_pos === 0) {
          stream.skipToEnd();
          return (
            'error ' + (TOKEN_NAMES[stream.string.charAt(0)] || '')
          ).replace(/ $/, '');
        }

        var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd();

        if (tw_pos === -1) {
          stream.skipToEnd();
        } else {
          stream.pos = tw_pos;
        }

        return token_name;
      },
    };
  });

  CodeMirror.defineMIME('text/x-diff', 'diff');
});
